using System;
using System.Collections.Generic;
using System.Text;

using System.Data.Common;

using MakeIT.Framework.Data;
using MakeIT.Look.Imagem.Entidades;

namespace MakeIT.Look.Imagem.Negocios
{
	public partial class LookDAOT : DAOT
	{

		public EstaticoFotoVO getEstaticoFoto(int? idEstaticoFoto)
		{
			EstaticoFotoVO estaticoFotoVO = null;
			List<EstaticoFotoVO> listEstaticoFotoVOs = getEstaticoFotos(idEstaticoFoto, null);
			if (listEstaticoFotoVOs != null && listEstaticoFotoVOs.Count > 0)
			{
				estaticoFotoVO = listEstaticoFotoVOs[0];
			}
			return estaticoFotoVO;
		}

		public List<EstaticoFotoVO> getEstaticoFotos()
		{
			return getEstaticoFotos(null, null);
		}

		public List<EstaticoFotoVO> getEstaticoFotos(int? idEstaticoFoto)
		{
			return getEstaticoFotos(idEstaticoFoto, null);
		}

		public List<EstaticoFotoVO> getEstaticoFotos(int? idEstaticoFoto, int? idEstatico)
		{
			string where = "WHERE ";
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT esf.idEstaticoFoto as esf_idEstaticoFoto, esf.idEstatico as esf_idEstatico, est.nome as est_nome, esf.fotoMime as esf_fotoMime, esf.fotoNome as esf_fotoNome , esf.cadastro as esf_cadastro, esf.cadastradoPor as esf_cadastradoPor, esf.edicao as esf_edicao, esf.editadoPor as esf_editadoPor  ");
			query.AppendLine("FROM estaticoFoto as esf LEFT OUTER JOIN estatico as est on esf.idEstatico=est.idEstatico  ");
			if (idEstaticoFoto != null)
			{
				query.AppendLine(where + "esf.idEstaticoFoto=@idEstaticoFoto ");
				where = "AND ";
			}
			if (idEstatico != null)
			{
				query.AppendLine(where + "esf.idEstatico=@idEstatico ");
				where = "AND ";
			}


			query.AppendLine("ORDER BY esf.idEstaticoFoto ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			if (idEstaticoFoto!= null) cmd.Parameters.Add(getParameter(cmd, "@idEstaticoFoto", idEstaticoFoto));
			if (idEstatico!= null) cmd.Parameters.Add(getParameter(cmd, "@idEstatico", idEstatico));


			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();

				List<EstaticoFotoVO> listEstaticoFoto = new List<EstaticoFotoVO>();

				while (reader.Read())
				{
					EstaticoFotoVO estaticoFotoVO = EstaticoFotoVO.CreateVO();
					estaticoFotoVO.idEstaticoFoto = reader.GetInt32(reader.GetOrdinal("esf_idEstaticoFoto"));
					estaticoFotoVO.idEstatico = reader.GetInt32(reader.GetOrdinal("esf_idEstatico"));
					if (!reader.IsDBNull(reader.GetOrdinal("est_nome")))
						estaticoFotoVO.idEstaticoVO.nome = reader.GetString(reader.GetOrdinal("est_nome"));
					if (!reader.IsDBNull(reader.GetOrdinal("esf_fotoMime")))
						estaticoFotoVO.fotoMime = reader.GetString(reader.GetOrdinal("esf_fotoMime"));
					if (!reader.IsDBNull(reader.GetOrdinal("esf_fotoNome")))
						estaticoFotoVO.fotoNome = reader.GetString(reader.GetOrdinal("esf_fotoNome"));
					estaticoFotoVO.cadastro = reader.GetDateTime(reader.GetOrdinal("esf_cadastro"));
					estaticoFotoVO.cadastradoPor = reader.GetString(reader.GetOrdinal("esf_cadastradoPor"));
					estaticoFotoVO.edicao = reader.GetDateTime(reader.GetOrdinal("esf_edicao"));
					estaticoFotoVO.editadoPor = reader.GetString(reader.GetOrdinal("esf_editadoPor"));


					listEstaticoFoto.Add(estaticoFotoVO);
				}
				reader.Close();
				return listEstaticoFoto;
			}
			catch (Exception ex) { throw ex; }
			finally
			{
				if (reader != null && !reader.IsClosed)
					reader.Close();
			}
		}

		public void setEstaticoFoto(EstaticoFotoVO estaticoFotoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("UPDATE estaticoFoto ");
			query.AppendLine("SET idEstatico=@idEstatico, fotoMime=@fotoMime, fotoNome=@fotoNome,  cadastro=@cadastro, cadastradoPor=@cadastradoPor, edicao=@edicao, editadoPor=@editadoPor ");
			query.AppendLine("WHERE idEstaticoFoto=@idEstaticoFoto ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idEstaticoFoto", estaticoFotoVO.idEstaticoFoto));
			cmd.Parameters.Add(getParameter(cmd, "@idEstatico", estaticoFotoVO.idEstatico));
			cmd.Parameters.Add(getParameter(cmd, "@fotoMime", estaticoFotoVO.fotoMime));
			cmd.Parameters.Add(getParameter(cmd, "@fotoNome", estaticoFotoVO.fotoNome));
			cmd.Parameters.Add(getParameter(cmd, "@cadastro", estaticoFotoVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@cadastradoPor", estaticoFotoVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@edicao", estaticoFotoVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@editadoPor", estaticoFotoVO.editadoPor));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}

		public long newEstaticoFoto(EstaticoFotoVO estaticoFotoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("INSERT INTO estaticoFoto ");
			query.AppendLine("  ( idEstatico, fotoMime, fotoNome, cadastro, cadastradoPor, edicao, editadoPor ) ");
			query.AppendLine("VALUES ( @idEstatico, @fotoMime, @fotoNome, @cadastro, @cadastradoPor, @edicao, @editadoPor ) ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idEstatico", estaticoFotoVO.idEstatico));
			cmd.Parameters.Add(getParameter(cmd, "@fotoMime", estaticoFotoVO.fotoMime));
			cmd.Parameters.Add(getParameter(cmd, "@fotoNome", estaticoFotoVO.fotoNome));
			cmd.Parameters.Add(getParameter(cmd, "@cadastro", estaticoFotoVO.cadastro));
			cmd.Parameters.Add(getParameter(cmd, "@cadastradoPor", estaticoFotoVO.cadastradoPor));
			cmd.Parameters.Add(getParameter(cmd, "@edicao", estaticoFotoVO.edicao));
			cmd.Parameters.Add(getParameter(cmd, "@editadoPor", estaticoFotoVO.editadoPor));


			try
			{
				cmd.ExecuteNonQuery();

				long newID = 0;
				if (tipo.Equals(DBType.MSSql))
				{
					cmd.CommandText = "SELECT IDENT_CURRENT('estaticoFoto') AS 'Identity' ";
					DbDataReader reader = cmd.ExecuteReader();
					reader.Read();
					newID = (long)reader.GetDecimal(reader.GetOrdinal("Identity"));
					reader.Close();
				}
				else if (tipo.Equals(DBType.MySql))
				{
					newID = ((MySql.Data.MySqlClient.MySqlCommand)cmd).LastInsertedId;
				}
				else if (tipo.Equals(DBType.ODBC))
				{
					//TODO implementar
				}
				else if (tipo.Equals(DBType.ORACLE))
				{
					//TODO implementar
				}
				return newID;
			}
			catch (Exception ex) { throw ex; }

		}

		public void delEstaticoFoto(EstaticoFotoVO estaticoFotoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("DELETE FROM estaticoFoto ");
			query.AppendLine("WHERE idEstaticoFoto=@idEstaticoFoto ");

			DbCommand cmd = getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idEstaticoFoto", estaticoFotoVO.idEstaticoFoto));


			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}
		public int getCountEstaticoFotoxIdEstatico(int? idEstatico)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT COUNT(idEstatico) as ocorrencias FROM estaticoFoto WHERE IdEstatico=@IdEstatico ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@IdEstatico", idEstatico));

			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();
				reader.Read();

				int ocorrencias = 0;
				ocorrencias = reader.GetInt32(reader.GetOrdinal("ocorrencias"));
				reader.Close();
				return ocorrencias;
			}
			catch (Exception ex) { throw ex; }
			finally
			{
				if (reader != null && !reader.IsClosed)
					reader.Close();
			}
		}
		public void setEstaticoFotoFoto(EstaticoFotoVO estaticoFotoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("UPDATE estaticoFoto ");
			query.AppendLine("SET foto=@foto, fotoMime=@fotoMime, fotoNome=@fotoNome ");
			query.AppendLine("WHERE idEstaticoFoto=@idEstaticoFoto ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idEstaticoFoto", estaticoFotoVO.idEstaticoFoto));

			cmd.Parameters.Add(getParameter(cmd, "@foto", estaticoFotoVO.foto));
			cmd.Parameters.Add(getParameter(cmd, "@fotoMime", estaticoFotoVO.fotoMime));
			cmd.Parameters.Add(getParameter(cmd, "@fotoNome", estaticoFotoVO.fotoNome));

			try
			{
				cmd.ExecuteNonQuery();
			}
			catch (Exception ex) { throw ex; }

		}

		public void getEstaticoFotoFoto(EstaticoFotoVO estaticoFotoVO)
		{
			StringBuilder query = new StringBuilder();

			query.AppendLine("SELECT foto as esf_foto, fotoMime as esf_fotoMime, fotoNome as esf_fotoNome ");
			query.AppendLine("FROM estaticoFoto ");
			query.AppendLine("WHERE idEstaticoFoto=@idEstaticoFoto ");

			DbCommand cmd = this.getCommand();
			cmd.CommandText = query.ToString();

			cmd.Parameters.Add(getParameter(cmd, "@idEstaticoFoto", estaticoFotoVO.idEstaticoFoto));


			DbDataReader reader = null;
			try
			{
				reader = cmd.ExecuteReader();

				if (reader.Read())
				{
					if (!reader.IsDBNull(reader.GetOrdinal("esf_foto")))
						estaticoFotoVO.foto = getBytesFromBlob(reader, "esf_foto");

					if (!reader.IsDBNull(reader.GetOrdinal("esf_fotoMime")))
						estaticoFotoVO.fotoMime = reader.GetString(reader.GetOrdinal("esf_fotoMime"));
					if (!reader.IsDBNull(reader.GetOrdinal("esf_fotoNome")))
						estaticoFotoVO.fotoNome = reader.GetString(reader.GetOrdinal("esf_fotoNome"));

				}
				reader.Close();
				return;
			}
			catch (Exception ex) { throw ex; }
			finally
			{
				if (reader != null && !reader.IsClosed)
					reader.Close();
			}
		}

	}
}
